package com.ruleengine.endpoint;

import com.ruleengine.context.IWorkflowConext;
import com.ruleengine.endpoint.callback.IEndpointCallBack;
import com.ruleengine.endpoint.data.IEndpointData;
import com.ruleengine.endpoint.exception.EndpointException;
import com.ybt.service.exception.ServiceException;

/**
 * 工作流叶子节点对象适配器接口.
 * 工作流引擎调用实现了此接口的服务适配器.
 * @author wuxiao
 * 
 * Created on Jul 22, 2012
 */
public interface IEndpoint {
    /**
     * 服务同步（阻塞）调用方法. 该方法执行完后，工作流工作线程会自动执行下一个指令.
     * 
     * @param context
     *            工作流上下文
     * @param data
     *            工作流数据参数
     * @return    工作流数据参数
     * @throws ServiceException
     */
    public IEndpointData send(IWorkflowConext context, IEndpointData data)
            throws EndpointException;

    /**
     * 服务异步（非阻塞）调用方法. 该方法执行完后，工作流工作线程会停止执行本工作流的指令.
     * </br>当接收到响应后，回调对象将会被调用
     * @param context
     *            工作量上下文
     * @param data
     *            工作流数据参数
     * @param callback
     *            回调对象，用户通过回调对象重新进入规则引擎
     * @throws ServiceException
     */
    public  void sendNonBlocking(IWorkflowConext context, IEndpointData data, IEndpointCallBack callback)
    throws EndpointException;
}
